WebGLãªã¯ã«ãŒãžã§ã³ã¯ãšãªãæ¢æ±ããã¬ã³ããªã³ã°ãæé©åãå¯èŠæ§ãã¹ãã«å¹æçã«äœ¿çšããWebã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãå€§å¹ ã«åäžãããæ¹æ³ãåŠã³ãŸãã
WebGLãªã¯ã«ãŒãžã§ã³ã¯ãšãªïŒå¯èŠæ§ãã¹ããšããã©ãŒãã³ã¹æé©å
WebGLéçºã®äžçã§ã¯ãããã©ãŒãã³ã¹ãæãéèŠã§ãã倿°ã®ãªããžã§ã¯ããæã€è€éãªã·ãŒã³ã¯ãGPUã«ããã«è² è·ãããããã¬ãŒã èœã¡ã貧匱ãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã«ã€ãªããå¯èœæ§ããããŸããããã軜æžããããã®åŒ·åãªãã¯ããã¯ã®äžã€ããªã¯ã«ãŒãžã§ã³ã«ãªã³ã°ã§ããããã¯ãä»ã®ãªããžã§ã¯ãã®èåŸã«é ããŠãããªããžã§ã¯ããã¬ã³ããªã³ã°ããªãããšã§ã貎éãªåŠçæéãç¯çŽãããã®ã§ããWebGLãªã¯ã«ãŒãžã§ã³ã¯ãšãªã¯ããªããžã§ã¯ãã®å¯èŠæ§ãå¹ççã«å€æããããã®ã¡ã«ããºã ãæäŸãã广çãªãªã¯ã«ãŒãžã§ã³ã«ãªã³ã°ãå¯èœã«ããŸãã
WebGLãªã¯ã«ãŒãžã§ã³ã¯ãšãªãšã¯ïŒ
WebGLãªã¯ã«ãŒãžã§ã³ã¯ãšãªã¯ãç¹å®ã®ã¬ã³ããªã³ã°ã³ãã³ãã»ããã«ãã£ãŠæç»ããããã©ã°ã¡ã³ãïŒãã¯ã»ã«ïŒã®æ°ãGPUã«åãåãããããšãã§ããæ©èœã§ããæ¬è³ªçã«ã¯ããªããžã§ã¯ãã®æç»ã³ãŒã«ãéä¿¡ãããã®ãã©ã°ã¡ã³ããããã¹ãã¹ããééããŠå®éã«å¯èŠã§ãã£ããã©ãããGPUãæããŠãããŸãããã®æ å ±ã¯ããã®ãªããžã§ã¯ããã·ãŒã³å ã®ä»ã®ãªããžã§ã¯ãã«ãã£ãŠãªã¯ã«ãŒãïŒé®èœïŒãããŠãããã©ããã倿ããããã«äœ¿çšã§ããŸããã¯ãšãªããŒãïŒãŸãã¯éåžžã«å°ããæ°ïŒãè¿ããå Žåãããã¯ãªããžã§ã¯ããå®å šã«ïŒãŸãã¯ã»ãšãã©ïŒãªã¯ã«ãŒããããŠãããåŸç¶ã®ãã¬ãŒã ã§ã¬ã³ããªã³ã°ããå¿ èŠããªãããšãæå³ããŸãããã®ãã¯ããã¯ã¯ãç¹ã«è€éãªã·ãŒã³ã«ãããŠãã¬ã³ããªã³ã°ã®ã¯ãŒã¯ããŒããå€§å¹ ã«åæžããããã©ãŒãã³ã¹ãåäžãããŸãã
ãªã¯ã«ãŒãžã§ã³ã¯ãšãªã®ä»çµã¿ïŒç°¡åãªæŠèŠ
- ã¯ãšãªãªããžã§ã¯ãã®äœæ: ãŸã
gl.createQuery()ã䜿çšããŠã¯ãšãªãªããžã§ã¯ããäœæããŸãããã®ãªããžã§ã¯ãããªã¯ã«ãŒãžã§ã³ã¯ãšãªã®çµæãä¿æããŸãã - ã¯ãšãªã®éå§:
gl.beginQuery(gl.ANY_SAMPLES_PASSED, query)ã䜿çšããŠã¯ãšãªãéå§ããŸããgl.ANY_SAMPLES_PASSEDã¿ãŒã²ããã¯ãããããã®ãµã³ãã«ïŒãã©ã°ã¡ã³ãïŒãããã¹ãã¹ããééãããã©ããã«èå³ãããããšãæå®ããŸããä»ã«ããããä¿å®çãªçµæãæäŸãããã©ãŒãã³ã¹åäžã®ããã«åœéœæ§ãå«ãå¯èœæ§ã®ããgl.ANY_SAMPLES_PASSED_CONSERVATIVEããããã¹ãã¹ããééãããµã³ãã«æ°ãã«ãŠã³ãããgl.SAMPLES_PASSEDïŒWebGL2ã§ã¯éæšå¥šïŒãªã©ã®ã¿ãŒã²ãããååšããŸãã - æœåšçã«ãªã¯ã«ãŒãããããªããžã§ã¯ãã®ã¬ã³ããªã³ã°: 次ã«ãå¯èŠæ§ããã¹ãããããªããžã§ã¯ãã®æç»ã³ãŒã«ãçºè¡ããŸããããã¯éåžžãåçŽåãããããŠã³ãã£ã³ã°ããã¯ã¹ããªããžã§ã¯ãã®å€§ãŸããªè¡šçŸã§ããåçŽåãããããŒãžã§ã³ãã¬ã³ããªã³ã°ããããšã§ãã¯ãšãªèªäœã®ããã©ãŒãã³ã¹ãžã®åœ±é¿ãäœæžããŸãã
- ã¯ãšãªã®çµäº:
gl.endQuery(gl.ANY_SAMPLES_PASSED)ã䜿çšããŠã¯ãšãªãçµäºããŸãã - ã¯ãšãªçµæã®ååŸ: ã¯ãšãªã®çµæã¯ããã«ã¯å©çšã§ããŸãããGPUãã¬ã³ããªã³ã°ã³ãã³ããåŠçããééãããã©ã°ã¡ã³ãã®æ°ã決å®ããæéãå¿
èŠã§ããçµæã¯
gl.getQueryParameter(query, gl.QUERY_RESULT)ã䜿çšããŠååŸã§ããŸãã - çµæã®è§£é: ã¯ãšãªã®çµæããŒããã倧ããå Žåããªããžã§ã¯ãã®å°ãªããšã1ã€ã®ãã©ã°ã¡ã³ããå¯èŠã§ãã£ãããšãæå³ããŸããçµæããŒãã®å Žåããªããžã§ã¯ãã¯å®å šã«ãªã¯ã«ãŒããããŠããããšãæå³ããŸãã
- ãªã¯ã«ãŒãžã§ã³ã«ãªã³ã°ãžã®çµæã®å©çš: ã¯ãšãªã®çµæã«åºã¥ããŠãåŸç¶ã®ãã¬ãŒã ã§å®å šã§è©³çްãªãªããžã§ã¯ããã¬ã³ããªã³ã°ãããã©ãããæ±ºå®ã§ããŸãã
ãªã¯ã«ãŒãžã§ã³ã¯ãšãªã䜿çšããå©ç¹
- ã¬ã³ããªã³ã°ããã©ãŒãã³ã¹ã®åäž: ãªã¯ã«ãŒãããããªããžã§ã¯ãã®ã¬ã³ããªã³ã°ãåé¿ããããšã§ããªã¯ã«ãŒãžã§ã³ã¯ãšãªã¯ã¬ã³ããªã³ã°ã®ã¯ãŒã¯ããŒããå€§å¹ ã«åæžããããé«ããã¬ãŒã ã¬ãŒããšã¹ã ãŒãºãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã«ã€ãªãããŸãã
- GPUè² è·ã®è»œæž: ã¬ã³ããªã³ã°ãå°ãªããšããããšã¯GPUã®ä»äºãå°ãªããšããããšã§ãããã¢ãã€ã«ããã€ã¹ã®ããããªãŒå¯¿åœãå»¶ã°ãããã¹ã¯ãããã³ã³ãã¥ãŒã¿ã®çºç±ãæããããšãã§ããŸãã
- èŠèŠçå¿ å®åºŠã®åäž: ã¬ã³ããªã³ã°ããã©ãŒãã³ã¹ãæé©åããããšã§ããã¬ãŒã ã¬ãŒããç ç²ã«ããããšãªãããã詳现ãªè€éãªã·ãŒã³ãã¬ã³ããªã³ã°ããäœè£ãçãŸããŸãã
- ã¹ã±ãŒã©ããªãã£: ãªã¯ã«ãŒãžã§ã³ã¯ãšãªã¯ãã·ãŒã³ã®è€éããå¢ãã«ã€ããŠããã©ãŒãã³ã¹ã®åäžã倧ãããªãããã倿°ã®ãªããžã§ã¯ããæã€è€éãªã·ãŒã³ã§ç¹ã«æçã§ãã
課é¡ãšèæ ®äºé
ãªã¯ã«ãŒãžã§ã³ã¯ãšãªã¯å€§ããªå©ç¹ãæäŸããŸãããçæãã¹ãããã€ãã®èª²é¡ãèæ ®äºé ããããŸãïŒ
- é å»¶ïŒã¬ã€ãã³ã·ïŒ: ãªã¯ã«ãŒãžã§ã³ã¯ãšãªã¯ãã¯ãšãªã®çµæãããã«ã¯å©çšã§ããªããããé å»¶ãçºçãããŸããGPUãã¬ã³ããªã³ã°ã³ãã³ããåŠçããééãããã©ã°ã¡ã³ãã®æ°ã決å®ããæéãå¿ èŠã§ãããã®é å»¶ã¯ãæ éã«åŠçããªããšèŠèŠçãªã¢ãŒãã£ãã¡ã¯ããåŒãèµ·ããå¯èœæ§ããããŸãã
- ã¯ãšãªã®ãªãŒããŒããã: ãªã¯ã«ãŒãžã§ã³ã¯ãšãªã®å®è¡ã«ã¯ãããçšåºŠã®ãªãŒããŒãããã䌎ããŸããGPUã¯ã¯ãšãªã®ç¶æ ã远跡ããããã¹ãã¹ããééãããã©ã°ã¡ã³ããã«ãŠã³ãããå¿ èŠããããŸãããã®ãªãŒããŒãããã¯ãã¯ãšãªãè³¢æã«äœ¿çšããªããšããã©ãŒãã³ã¹ã®å©ç¹ãçžæ®ºããå¯èœæ§ããããŸãã
- ä¿å®çãªãªã¯ã«ãŒãžã§ã³: é å»¶ã®åœ±é¿ãæå°éã«æããããããªããžã§ã¯ããããããªãã©ã°ã¡ã³ãããèŠããªããŠãå¯èŠãšèŠãªããä¿å®çãªãªã¯ã«ãŒãžã§ã³ã䜿çšããããšãæãŸããå ŽåããããŸããããã«ãããéšåçã«ãªã¯ã«ãŒãããããªããžã§ã¯ããã¬ã³ããªã³ã°ãããå¯èœæ§ããããŸãããç©æ¥µçãªãªã¯ã«ãŒãžã§ã³ã«ãªã³ã°ã§çºçãããèŠèŠçãªã¢ãŒãã£ãã¡ã¯ããåé¿ã§ããŸãã
- ããŠã³ãã£ã³ã°ããªã¥ãŒã ã®éžæ: ãªã¯ã«ãŒãžã§ã³ã¯ãšãªã«äœ¿çšããããŠã³ãã£ã³ã°ããªã¥ãŒã ïŒäŸïŒããŠã³ãã£ã³ã°ããã¯ã¹ãããŠã³ãã£ã³ã°ã¹ãã£ã¢ïŒã®éžæã¯ãããã©ãŒãã³ã¹ã«å€§ãã圱é¿ããŸããããåçŽãªããŠã³ãã£ã³ã°ããªã¥ãŒã ã¯ã¬ã³ããªã³ã°ãé«éã§ãããåœéœæ§ïŒã€ãŸããã»ãšãã©ãªã¯ã«ãŒããããŠããã«ããããããå¯èŠãšèŠãªããããªããžã§ã¯ãïŒãå€ããªãå¯èœæ§ããããŸãã
- åæ: ã¯ãšãªçµæã®ååŸã«ã¯CPUãšGPUéã®åæãå¿ èŠã§ãããã®åæã¯ã¬ã³ããªã³ã°ãã€ãã©ã€ã³ã«ã¹ããŒã«ãåŒãèµ·ãããããã©ãŒãã³ã¹ã«æªåœ±é¿ãäžããå¯èœæ§ããããŸãã
- ãã©ãŠã¶ãšããŒããŠã§ã¢ã®äºææ§: 察象ã®ãã©ãŠã¶ãšããŒããŠã§ã¢ããªã¯ã«ãŒãžã§ã³ã¯ãšãªããµããŒãããŠããããšã確èªããŠãã ãããåºããµããŒããããŠããŸãããå€ãã·ã¹ãã ã§ã¯ãã®æ©èœãæ¬ ããŠããå¯èœæ§ãããããã©ãŒã«ããã¯ã¡ã«ããºã ãå¿ èŠã«ãªããŸãã
WebGLãªã¯ã«ãŒãžã§ã³ã¯ãšãªã䜿çšããããã®ãã¹ããã©ã¯ãã£ã¹
ãªã¯ã«ãŒãžã§ã³ã¯ãšãªã®å©ç¹ãæå€§åãã課é¡ãæå°éã«æããããã«ã以äžã®ãã¹ããã©ã¯ãã£ã¹ãæ€èšããŠãã ããïŒ
1. åçŽåãããããŠã³ãã£ã³ã°ããªã¥ãŒã ã䜿çšãã
ãªã¯ã«ãŒãžã§ã³ã¯ãšãªã®ããã«å®å šã§è©³çްãªãªããžã§ã¯ããã¬ã³ããªã³ã°ãã代ããã«ãããŠã³ãã£ã³ã°ããã¯ã¹ãããŠã³ãã£ã³ã°ã¹ãã£ã¢ãªã©ã®åçŽåãããããŠã³ãã£ã³ã°ããªã¥ãŒã ãã¬ã³ããªã³ã°ããŸããããã«ãããã¬ã³ããªã³ã°ã®ã¯ãŒã¯ããŒããåæžãããã¯ãšãªããã»ã¹ãé«éåãããŸããããŠã³ãã£ã³ã°ããªã¥ãŒã ã¯ãåœéœæ§ãæå°éã«æããããã«ãªããžã§ã¯ãããŽã£ãããšå²ãã¹ãã§ãã
äŸïŒ è»ã®è€éãª3Dã¢ãã«ãæ³åããŠãã ããããªã¯ã«ãŒãžã§ã³ã¯ãšãªã®ããã«è»ã¢ãã«å šäœãã¬ã³ããªã³ã°ãã代ããã«ãè»ãå å ããåçŽãªããŠã³ãã£ã³ã°ããã¯ã¹ãã¬ã³ããªã³ã°ã§ããŸãããã®ããŠã³ãã£ã³ã°ããã¯ã¹ã¯ãå®å šãªè»ã¢ãã«ãããã¯ããã«é«éã«ã¬ã³ããªã³ã°ãããŸãã
2. éå±€çãªã¯ã«ãŒãžã§ã³ã«ãªã³ã°ã䜿çšãã
è€éãªã·ãŒã³ã§ã¯ããªããžã§ã¯ããããŠã³ãã£ã³ã°ããªã¥ãŒã ã®éå±€ã«æŽçããéå±€çãªã¯ã«ãŒãžã§ã³ã«ãªã³ã°ã®äœ¿çšãæ€èšããŠãã ããããŸãäžäœã¬ãã«ã®ããŠã³ãã£ã³ã°ããªã¥ãŒã ã«å¯ŸããŠãªã¯ã«ãŒãžã§ã³ã¯ãšãªãå®è¡ã§ããŸããäžäœã¬ãã«ã®ããŠã³ãã£ã³ã°ããªã¥ãŒã ããªã¯ã«ãŒããããŠããå Žåããã®åã«å¯Ÿãããªã¯ã«ãŒãžã§ã³ã¯ãšãªã®å®è¡ãåé¿ã§ããŸããããã«ãããå¿ èŠãªãªã¯ã«ãŒãžã§ã³ã¯ãšãªã®æ°ãå€§å¹ ã«åæžã§ããŸãã
äŸïŒ éœåžã®ã·ãŒã³ãèããŠã¿ãŸãããã建ç©ããããã¯ã«ããããã¯ãå°åºã«æŽçããããšãã§ããŸãããããŠããŸãå°åºã«å¯ŸããŠãªã¯ã«ãŒãžã§ã³ã¯ãšãªãå®è¡ããŸããå°åºããªã¯ã«ãŒããããŠããå Žåããã®å°åºå ã®åã ã®ãããã¯ã建ç©ã®ãªã¯ã«ãŒãžã§ã³ã¯ãšãªã®å®è¡ãåé¿ã§ããŸãã
3. ãã¬ãŒã ã³ããŒã¬ã³ã·ãŒãå©çšãã
ãªã¯ã«ãŒãžã§ã³ã¯ãšãªã¯ãã¬ãŒã ã³ããŒã¬ã³ã·ãŒã瀺ããŸããã€ãŸãããªããžã§ã¯ãã®å¯èŠæ§ã¯ãã¬ãŒã ãããã¬ãŒã ãžãšé¡äŒŒããŠããå¯èœæ§ãé«ãã§ãããã®ãã¬ãŒã ã³ããŒã¬ã³ã·ãŒãå©çšããŠãã¯ãšãªçµæããã£ãã·ã¥ããåŸç¶ã®ãã¬ãŒã ã§ã®ãªããžã§ã¯ãã®å¯èŠæ§ãäºæž¬ããããšãã§ããŸããããã«ãããå¿ èŠãªãªã¯ã«ãŒãžã§ã³ã¯ãšãªã®æ°ãæžãããããã©ãŒãã³ã¹ãåäžãããããšãã§ããŸãã
äŸïŒ ãªããžã§ã¯ããåã®ãã¬ãŒã ã§å¯èŠã ã£ãå ŽåãçŸåšã®ãã¬ãŒã ã§ãå¯èŠã§ããå¯èœæ§ãé«ããšä»®å®ã§ããŸãããããŠããã®ãªããžã§ã¯ãããªã¯ã«ãŒããããå¯èœæ§ãé«ããªããŸã§ïŒäŸïŒä»ã®ãªããžã§ã¯ãã®èåŸã«ç§»åããå ŽåïŒããã®ãªããžã§ã¯ãã«å¯Ÿãããªã¯ã«ãŒãžã§ã³ã¯ãšãªã®å®è¡ãé ãããããšãã§ããŸãã
4. ä¿å®çãªãªã¯ã«ãŒãžã§ã³ã®äœ¿çšãæ€èšãã
é å»¶ã®åœ±é¿ãæå°éã«æããããã«ããªããžã§ã¯ããããããªãã©ã°ã¡ã³ãããèŠããªããŠãå¯èŠãšèŠãªããä¿å®çãªãªã¯ã«ãŒãžã§ã³ã®äœ¿çšãæ€èšããŠãã ãããããã¯ãã¯ãšãªçµæã«ãããå€ãèšå®ããããšã§å®çŸã§ããŸããã¯ãšãªçµæããããå€ãè¶ ããŠããå Žåããªããžã§ã¯ãã¯å¯èŠãšèŠãªãããŸãããã以å€ã®å Žåã¯ããªã¯ã«ãŒããããŠãããšèŠãªãããŸãã
äŸïŒ 10ãã©ã°ã¡ã³ãã®ãããå€ãèšå®ã§ããŸããã¯ãšãªçµæã10ãã倧ããå Žåããªããžã§ã¯ãã¯å¯èŠãšèŠãªãããŸãããã以å€ã®å Žåã¯ããªã¯ã«ãŒããããŠãããšèŠãªãããŸããé©åãªãããå€ã¯ãã·ãŒã³å ã®ãªããžã§ã¯ãã®ãµã€ãºãšè€éãã«äŸåããŸãã
5. ãã©ãŒã«ããã¯ã¡ã«ããºã ãå®è£ ãã
ãã¹ãŠã®ãã©ãŠã¶ãšããŒããŠã§ã¢ããªã¯ã«ãŒãžã§ã³ã¯ãšãªããµããŒãããŠããããã§ã¯ãããŸããããªã¯ã«ãŒãžã§ã³ã¯ãšãªãå©çšã§ããªãå Žåã«äœ¿çšã§ãããã©ãŒã«ããã¯ã¡ã«ããºã ãå®è£ ããããšãéèŠã§ããããã«ã¯ãããåçŽãªãªã¯ã«ãŒãžã§ã³ã«ãªã³ã°ã¢ã«ãŽãªãºã ã䜿çšããããåã«ãªã¯ã«ãŒãžã§ã³ã«ãªã³ã°ãå®å šã«ç¡å¹ã«ããããšãå«ãŸããŸãã
äŸïŒ EXT_occlusion_query_booleanæ¡åŒµæ©èœããµããŒããããŠãããã©ããã確èªã§ããŸãããµããŒããããŠããªãå Žåã¯ãã«ã¡ã©ããé ããããªããžã§ã¯ããã¬ã³ããªã³ã°ããªããåçŽãªè·é¢ããŒã¹ã®ã«ãªã³ã°ã¢ã«ãŽãªãºã ã«ãã©ãŒã«ããã¯ããããšãã§ããŸãã
6. ã¬ã³ããªã³ã°ãã€ãã©ã€ã³ãæé©åãã
ãªã¯ã«ãŒãžã§ã³ã¯ãšãªã¯ãã¬ã³ããªã³ã°ããã©ãŒãã³ã¹ãæé©åããäžã§ã®ããºã«ã®äžçã«ãããŸããã以äžãå«ãã¬ã³ããªã³ã°ãã€ãã©ã€ã³ã®æ®ãã®éšåãæé©åããããšãéèŠã§ãïŒ
- æç»ã³ãŒã«ã®æ°ãæžãã: æç»ã³ãŒã«ããããåŠçããããšã§ãã¬ã³ããªã³ã°ã®ãªãŒããŒããããå€§å¹ ã«åæžã§ããŸãã
- å¹ççãªã·ã§ãŒããŒã䜿çšãã: ã·ã§ãŒããŒãæé©åããããšã§ãåé ç¹ãšãã©ã°ã¡ã³ãã®åŠçã«è²»ããæéãççž®ã§ããŸãã
- ããããããã³ã°ã䜿çšãã: ããããããã³ã°ã¯ããã¯ã¹ãã£ãã£ã«ã¿ãªã³ã°ã®ããã©ãŒãã³ã¹ãåäžãããããšãã§ããŸãã
- ãªãŒããŒãããŒãæžãã: ãªãŒããŒãããŒã¯ããã©ã°ã¡ã³ããäºãã«éãªãåã£ãŠæç»ããããšãã«çºçããåŠçæéãç¡é§ã«ããŸãã
- ã€ã³ã¹ã¿ã³ã·ã³ã°ã䜿çšãã: ã€ã³ã¹ã¿ã³ã·ã³ã°ã䜿çšãããšãåäžã®æç»ã³ãŒã«ã§åããªããžã§ã¯ãã®è€æ°ã®ã³ããŒãã¬ã³ããªã³ã°ã§ããŸãã
7. éåæã®ã¯ãšãªååŸ
GPUãã¯ãšãªã®åŠçãçµããŠããªãå Žåãã¯ãšãªçµæã®ååŸã¯ã¹ããŒã«ãåŒãèµ·ããå¯èœæ§ããããŸããå©çšå¯èœã§ããã°ãéåæã®ååŸã¡ã«ããºã ãå©çšããããšã§ããããç·©åããã®ã«åœ¹ç«ã¡ãŸããæè¡ã«ã¯ãçµæãååŸããåã«ç¹å®ã®ãã¬ãŒã æ°ãåŸ ã€ããšããå°çšã®ã¯ãŒã«ãŒã¹ã¬ããã䜿çšããŠã¯ãšãªååŸããã»ã¹ãåŠçããã¡ã€ã³ã®ã¬ã³ããªã³ã°ã¹ã¬ããã®ããããã³ã°ãé²ãããšãå«ãŸããå ŽåããããŸãã
ã³ãŒãäŸïŒåºæ¬çãªãªã¯ã«ãŒãžã§ã³ã¯ãšãªã®å®è£
以äžã¯ãWebGLã§ã®ãªã¯ã«ãŒãžã§ã³ã¯ãšãªã®åºæ¬çãªäœ¿çšæ³ã瀺ãç°¡ç¥åãããäŸã§ãïŒ
// ã¯ãšãªãªããžã§ã¯ããäœæ
const query = gl.createQuery();
// ã¯ãšãªãéå§
gl.beginQuery(gl.ANY_SAMPLES_PASSED, query);
// ãªããžã§ã¯ããã¬ã³ããªã³ã°ïŒäŸïŒããŠã³ãã£ã³ã°ããã¯ã¹ïŒ
gl.drawArrays(gl.TRIANGLES, 0, vertexCount);
// ã¯ãšãªãçµäº
gl.endQuery(gl.ANY_SAMPLES_PASSED);
// ã¯ãšãªçµæãéåæã«ååŸïŒrequestAnimationFrameã䜿çšããäŸïŒ
function checkQueryResult() {
gl.getQueryParameter(query, gl.QUERY_RESULT_AVAILABLE, (available) => {
if (available) {
gl.getQueryParameter(query, gl.QUERY_RESULT, (result) => {
const isVisible = result > 0;
// å¯èŠæ§ã®çµæã䜿çšããŠãå®å
šãªãªããžã§ã¯ããã¬ã³ããªã³ã°ãããã©ãããæ±ºå®
if (isVisible) {
renderFullObject();
}
});
} else {
requestAnimationFrame(checkQueryResult);
}
});
}
requestAnimationFrame(checkQueryResult);
æ³šïŒ ããã¯ç°¡ç¥åãããäŸã§ããããšã©ãŒãã³ããªã³ã°ãé©åãªãªãœãŒã¹ç®¡çããŸãã¯é«åºŠãªæé©åæè¡ã¯å«ãŸããŠããŸããããããç¹å®ã®ã·ãŒã³ãèŠä»¶ã«åãããŠèª¿æŽããããšãå¿ããªãã§ãã ãããç¹ã«æ¡åŒµæ©èœã®ãµããŒããã¯ãšãªã®å¯çšæ§ã«é¢ãããšã©ãŒãã³ããªã³ã°ã¯ãæ¬çªç°å¢ã§ã¯äžå¯æ¬ ã§ããããŸããŸãªæœåšçãªã·ããªãªãåŠçããããã®é©å¿ãèæ ®ããå¿ èŠããããŸãã
å®äžçã®ã¢ããªã±ãŒã·ã§ã³ã«ããããªã¯ã«ãŒãžã§ã³ã¯ãšãª
ãªã¯ã«ãŒãžã§ã³ã¯ãšãªã¯ã以äžãå«ãå¹ åºãå®äžçã®ã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšãããŠããŸãïŒ
- ã²ãŒã éçº: ãªã¯ã«ãŒãžã§ã³ã«ãªã³ã°ã¯ãç¹ã«å€æ°ã®ãªããžã§ã¯ããæã€è€éãªã·ãŒã³ã§ã®ã²ãŒã ã®ã¬ã³ããªã³ã°ããã©ãŒãã³ã¹ãæé©åããããã®éèŠãªãã¯ããã¯ã§ããäŸãšããŠã¯ãWebAssemblyãšWebGLã䜿çšããŠãã©ãŠã¶ã§ã¬ã³ããªã³ã°ãããAAAã¿ã€ãã«ãã詳现ãªç°å¢ãæã€WebããŒã¹ã®ã«ãžã¥ã¢ã«ã²ãŒã ãªã©ããããŸãã
- 建ç¯ããžã¥ã¢ã©ã€ãŒãŒã·ã§ã³: ãªã¯ã«ãŒãžã§ã³ã¯ãšãªã¯ã建ç¯ããžã¥ã¢ã©ã€ãŒãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãåäžãããããã«äœ¿çšã§ãããŠãŒã¶ãŒã¯å€§èŠæš¡ã§è©³çްãªå»ºç©ã¢ãã«ããªã¢ã«ã¿ã€ã ã§æ¢çŽ¢ã§ããŸããç¡æ°ã®å±ç€ºç©ãããä»®æ³åç©é€šãæ¢çŽ¢ããããšãæ³åããŠã¿ãŠãã ãã - ãªã¯ã«ãŒãžã§ã³ã«ãªã³ã°ã¯ã¹ã ãŒãºãªããã²ãŒã·ã§ã³ãä¿èšŒããŸãã
- å°çæ å ±ã·ã¹ãã ïŒGISïŒ: ãªã¯ã«ãŒãžã§ã³ã¯ãšãªã¯ãéœåžã颚æ¯ãªã©ã®å€§èŠæš¡ã§è€éãªå°çããŒã¿ã»ããã®ã¬ã³ããªã³ã°ãæé©åããããã«äœ¿çšã§ããŸããäŸãã°ãéœåžèšç»ã·ãã¥ã¬ãŒã·ã§ã³ã®ããã«Webãã©ãŠã¶å ã§éœåžæ¯èгã®3Dã¢ãã«ãèŠèŠåããããšã¯ããªã¯ã«ãŒãžã§ã³ã«ãªã³ã°ãã倧ããªæ©æµãåããããšãã§ããŸãã
- å»çç»å: ãªã¯ã«ãŒãžã§ã³ã¯ãšãªã¯ãå»çç»åã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãåäžãããããã«äœ¿çšã§ããå»åž«ã¯è€éãªè§£ååŠçæ§é ããªã¢ã«ã¿ã€ã ã§èŠèŠåã§ããŸãã
- Eã³ããŒã¹: 補åã®3Dã¢ãã«ãæç€ºãããŠã§ããµã€ãã§ã¯ããªã¯ã«ãŒãžã§ã³ã¯ãšãªã¯GPUè² è·ã軜æžããããã»ã©åŒ·åã§ãªãããã€ã¹ã§ãã¹ã ãŒãºãªäœéšãä¿èšŒããã®ã«åœ¹ç«ã¡ãŸããã¢ãã€ã«ããã€ã¹ã§è€éãªå®¶å ·ã®3Dã¢ãã«ã衚瀺ããããšãèããŠã¿ãŠãã ããããªã¯ã«ãŒãžã§ã³ã«ãªã³ã°ã¯ã劥åœãªãã¬ãŒã ã¬ãŒããç¶æããã®ã«åœ¹ç«ã¡ãŸãã
çµè«
WebGLãªã¯ã«ãŒãžã§ã³ã¯ãšãªã¯ãWebã¢ããªã±ãŒã·ã§ã³ã®ã¬ã³ããªã³ã°ããã©ãŒãã³ã¹ãæé©åãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžãããããã®åŒ·åãªããŒã«ã§ãããªã¯ã«ãŒãããããªããžã§ã¯ãã广çã«ã«ãªã³ã°ããããšã§ãã¬ã³ããªã³ã°ã®ã¯ãŒã¯ããŒããåæžãããã¬ãŒã ã¬ãŒããåäžãããããè€éã§è©³çްãªã·ãŒã³ãå¯èœã«ããããšãã§ããŸããé å»¶ãã¯ãšãªã®ãªãŒããŒããããªã©ãèæ ®ãã¹ã課é¡ã¯ãããŸããããã¹ããã©ã¯ãã£ã¹ã«åŸããã¢ããªã±ãŒã·ã§ã³ã®ç¹å®ã®ããŒãºãæ éã«æ€èšããããšã§ããªã¯ã«ãŒãžã§ã³ã¯ãšãªã®å¯èœæ§ãæå€§éã«åŒãåºãããšãã§ããŸãããããã®ãã¯ããã¯ãç¿åŸããããšã§ãäžçäžã®éçºè ã¯ãããè±ãã§ãããæ²¡å ¥æã®ãããããã©ãŒãã³ã¹ã®é«ãWebããŒã¹ã®3DäœéšãæäŸã§ããŸãã
ãããªããªãœãŒã¹
- WebGL仿§æž: ãªã¯ã«ãŒãžã§ã³ã¯ãšãªã«é¢ããææ°æ å ±ã«ã€ããŠã¯ãå ¬åŒã®WebGL仿§æžãåç §ããŠãã ããã
- Khronos Group: WebGLããã³OpenGL ESã«é¢é£ãããªãœãŒã¹ã«ã€ããŠã¯ãKhronos Groupã®ãŠã§ããµã€ããæ¢çŽ¢ããŠãã ããã
- ãªã³ã©ã€ã³ãã¥ãŒããªã¢ã«ãšèšäº: å®çšçãªäŸãé«åºŠãªãã¯ããã¯ã«ã€ããŠã¯ãWebGLãªã¯ã«ãŒãžã§ã³ã¯ãšãªã«é¢ãããªã³ã©ã€ã³ãã¥ãŒããªã¢ã«ãèšäºãæ€çŽ¢ããŠãã ããã
- WebGLãã¢: å®éã®å°å ¥äŸããåŠã¶ããã«ããªã¯ã«ãŒãžã§ã³ã¯ãšãªãå©çšããŠããæ¢åã®WebGLãã¢ã調ã¹ãŠãã ããã